#ifndef QINIUMANAGER_H
#define QINIUMANAGER_H

#include <QObject>
#include <QStringList>
#include <QMap>
#include "QiniuUploader.h"

/**
 * @brief 七牛云管理类
 * 对七牛云上传器进行更高层次的封装，提供简单的接口
 */
class QiniuManager : public QObject
{
    Q_OBJECT
public:
    explicit QiniuManager(QObject *parent = nullptr);
    ~QiniuManager();

    /**
     * @brief 初始化七牛云配置
     * @param accessKey 七牛云AccessKey
     * @param secretKey 七牛云SecretKey
     * @param bucket 存储空间名称
     * @param zone 区域代码
     * @return 初始化是否成功
     */
    bool init(const QString &accessKey,
             const QString &secretKey,
             const QString &bucket,
             const QString &zone = "z2");

    /**
     * @brief 上传图片
     * @param filePath 本地图片路径
     * @return 操作是否成功
     */
    bool uploadImage(const QString &filePath);

    /**
     * @brief 获取已上传图片列表
     * @return 图片信息列表，每项包含key和url
     */
    QList<QPair<QString, QString>> getUploadedImages() const;

signals:
    /**
     * @brief 上传进度信号
     * @param filePath 正在上传的文件路径
     * @param percent 进度百分比
     */
    void uploadProgress(const QString &filePath, int percent);

    /**
     * @brief 上传完成信号
     * @param filePath 已上传的文件路径
     * @param key 文件在七牛云的唯一标识
     * @param url 文件的访问URL
     */
    void uploadFinished(const QString &filePath, const QString &key, const QString &url);

    /**
     * @brief 上传错误信号
     * @param filePath 上传失败的文件路径
     * @param errorMsg 错误信息
     */
    void uploadError(const QString &filePath, const QString &errorMsg);

private:
    QiniuUploader *m_uploader;

    // 保存已上传图片的信息(key, url)
    QList<QPair<QString, QString>> m_uploadedImages;

    // 当前正在上传的文件路径
    QString m_currentUploadingFile;
};

#endif // QINIUMANAGER_H
